//package org.convallaria.system.biz.controller.other;
//
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.convallaria.system.biz.service.HybridCacheTestService;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * 混合缓存测试控制器
// *
// * @author gjh
// * @since 2024-09-25
// */
//@Slf4j
//@RestController
//@RequestMapping("/api/cache/hybrid")
//@RequiredArgsConstructor
//public class HybridCacheTestController {
//
//    private final HybridCacheTestService hybridCacheTestService;
//
//    /**
//     * 测试基本缓存功能
//     */
//    @GetMapping("/test/{id}")
//    public Map<String, Object> testCache(@PathVariable String id) {
//        long startTime = System.currentTimeMillis();
//
//        // 第一次调用（应该查询数据库）
//        String data1 = hybridCacheTestService.getCachedData(id);
//        long firstCallTime = System.currentTimeMillis() - startTime;
//
//        // 第二次调用（应该从缓存获取）
//        startTime = System.currentTimeMillis();
//        String data2 = hybridCacheTestService.getCachedData(id);
//        long secondCallTime = System.currentTimeMillis() - startTime;
//
//        Map<String, Object> result = new HashMap<>();
//        result.put("id", id);
//        result.put("firstCall", Map.of(
//            "data", data1,
//            "time", firstCallTime + "ms"
//        ));
//        result.put("secondCall", Map.of(
//            "data", data2,
//            "time", secondCallTime + "ms"
//        ));
//        result.put("cacheHit", data1.equals(data2));
//
//        return result;
//    }
//
//    /**
//     * 测试随机数据缓存
//     */
//    @GetMapping("/random/{seed}")
//    public Map<String, Object> testRandomCache(@PathVariable int seed) {
//        long startTime = System.currentTimeMillis();
//        String data = hybridCacheTestService.getRandomData(seed);
//        long callTime = System.currentTimeMillis() - startTime;
//
//        Map<String, Object> result = new HashMap<>();
//        result.put("seed", seed);
//        result.put("data", data);
//        result.put("time", callTime + "ms");
//
//        return result;
//    }
//
//    /**
//     * 测试复杂对象缓存
//     */
//    @GetMapping("/complex/{type}/{id}")
//    public Map<String, Object> testComplexCache(@PathVariable String type, @PathVariable String id) {
//        long startTime = System.currentTimeMillis();
//        HybridCacheTestService.ComplexData data = hybridCacheTestService.getComplexData(type, id);
//        long callTime = System.currentTimeMillis() - startTime;
//
//        Map<String, Object> result = new HashMap<>();
//        result.put("type", type);
//        result.put("id", id);
//        result.put("data", data);
//        result.put("time", callTime + "ms");
//
//        return result;
//    }
//
//    /**
//     * 清除指定缓存
//     */
//    @DeleteMapping("/evict/{id}")
//    public Map<String, Object> evictCache(@PathVariable String id) {
//        hybridCacheTestService.evictCache(id);
//
//        Map<String, Object> result = new HashMap<>();
//        result.put("message", "缓存已清除");
//        result.put("id", id);
//
//        return result;
//    }
//
//    /**
//     * 清空所有缓存
//     */
//    @DeleteMapping("/clear")
//    public Map<String, Object> clearAllCache() {
//        hybridCacheTestService.clearAllCache();
//
//        Map<String, Object> result = new HashMap<>();
//        result.put("message", "所有缓存已清空");
//
//        return result;
//    }
//
//    /**
//     * 性能测试
//     */
//    @GetMapping("/performance/{count}")
//    public Map<String, Object> performanceTest(@PathVariable int count) {
//        long totalTime = 0;
//        long cacheHitTime = 0;
//        int cacheHits = 0;
//
//        for (int i = 0; i < count; i++) {
//            String id = "perf-test-" + (i % 10); // 重复使用ID测试缓存命中
//
//            long startTime = System.currentTimeMillis();
//            hybridCacheTestService.getCachedData(id);
//            long callTime = System.currentTimeMillis() - startTime;
//
//            totalTime += callTime;
//
//            if (callTime < 50) { // 假设缓存命中时间小于50ms
//                cacheHitTime += callTime;
//                cacheHits++;
//            }
//        }
//
//        Map<String, Object> result = new HashMap<>();
//        result.put("totalCalls", count);
//        result.put("totalTime", totalTime + "ms");
//        result.put("averageTime", (totalTime / count) + "ms");
//        result.put("cacheHits", cacheHits);
//        result.put("cacheHitRate", String.format("%.2f%%", (double) cacheHits / count * 100));
//        result.put("averageCacheHitTime", cacheHits > 0 ? (cacheHitTime / cacheHits) + "ms" : "N/A");
//
//        return result;
//    }
//}
